﻿using System;

// 链表节点类
public class Node<T>
{
    public Node<T> Next { get; set; } // 下一个节点
    public T Data { get; set; }       // 节点数据

    public Node(T t)                  // 构造函数
    {
        Next = null;
        Data = t;
    }
}

// 泛型链表类
public class GenericList<T>
{
    private Node<T> head; // 头节点
    private Node<T> tail; // 尾节点

    public GenericList()              // 构造函数
    {
        tail = head = null;
    }

    public Node<T> Head
    {
        get => head;                  // 获取头节点
    }

    // 添加节点方法
    public void Add(T t)
    {
        Node<T> n = new Node<T>(t);
        if (tail == null)
        {
            head = tail = n;
        }
        else
        {
            tail.Next = n;
            tail = n;
        }
    }

    // ForEach 方法，遍历链表并对每个节点执行指定操作
    public void ForEach(Action<T> action)
    {
        Node<T> current = head;
        while (current != null)
        {
            action(current.Data);      // 对当前节点数据执行操作
            current = current.Next;    // 移动到下一个节点
        }
    }
}

// 程序入口类
class Program
{
    static void Main(string[] args)
    {
        GenericList<int> list = new GenericList<int>();
        // 向链表中添加一些整数
        list.Add(1);
        list.Add(2);
        list.Add(3);

        // 使用 ForEach 方法和 lambda 表达式打印链表元素
        Console.WriteLine("链表元素：");
        list.ForEach(item => Console.WriteLine(item));

        // 使用 ForEach 方法和 lambda 表达式求最大值
        int max = int.MinValue;
        list.ForEach(item => { if (item > max) max = item; });
        Console.WriteLine($"最大值：{max}");

        // 使用 ForEach 方法和 lambda 表达式求最小值
        int min = int.MaxValue;
        list.ForEach(item => { if (item < min) min = item; });
        Console.WriteLine($"最小值：{min}");

        // 使用 ForEach 方法和 lambda 表达式求和
        int sum = 0;
        list.ForEach(item => sum += item);
        Console.WriteLine($"求和：{sum}");
    }
}
